import { defineWrappedResponseHandler } from "#server/utils/handler"; import { R } from "#server/utils/response"; import { resolveAgentIdentity } from "#server/service/agent/identity"; import { createSession } from "#server/service/agent/session"; import { generateTempToken, setTempTokenCookie, getTempTokenTtlMs } from "#server/service/agent/temp-token"; import { getConfigUser, getConfigGlobal } from "#server/utils/context"; import { getAgentBySlug } from "#server/service/agent/agent"; export default defineWrappedResponseHandler(async (event) => { const agentSlug = getRouterParam(event, "agentSlug"); if (!agentSlug) { return R.error("参数无效", null); } const agent = await getAgentBySlug(agentSlug); if (!agent) { return R.error("agent 不存在", null); } const identity = await resolveAgentIdentity(event); let tempToken: string | null = null; let expiresAt: Date | null = null; if (!identity.userId && !identity.tempToken) { tempToken = generateTempToken(); expiresAt = new Date(Date.now() + getTempTokenTtlMs()); setTempTokenCookie(event, tempToken); } else if (!identity.userId && identity.tempToken) { tempToken = identity.tempToken; expiresAt = new Date(Date.now() + getTempTokenTtlMs()); } let modelId: number | null = null; if (identity.userId) { const preferred = await getConfigUser(event, "preferredLlmModelId"); if (preferred && preferred > 0) { modelId = preferred; } } if (!modelId && agent.defaultModelId) { modelId = agent.defaultModelId; } if (!modelId) { const globalDefault = await getConfigGlobal("agentDefaultModelId"); if (globalDefault && globalDefault > 0) { modelId = globalDefault; } } const body = await readBody(event).catch(() => ({})); const systemPrompt: string | null = typeof body?.systemPrompt === "string" && body.systemPrompt.trim().length > 0 ? body.systemPrompt.slice(0, 5000) : null; const session = await createSession({ userId: identity.userId, tempToken, agentId: agent.id, modelId, enableThinking: agent.enableThinking, enableTools: agent.enableTools, systemPrompt, expiresAt, }); return R.success(session); });